/**
 *
 */
package com.naiterui.ehp.bp.utils.biz;

import java.util.Map;
import java.util.TreeMap;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.naiterui.ehp.bp.support.utils.JsonMapper;

/**
 * 客户端原生协议AppJumpProtocol
 * @author Gaoll
 * @since HZD-1.0.0
 */
public enum AppJumpProtocol {

    // =========================医生APP协议==========================//
    /**
     * 内部web页
     */
    DR_WEB("web", "linkurl"),
    /**
     * 外部web页
     */
    DR_SAFARI("safari", "linkurl"),
    /**
     * 首页
     */
    DR_HOME("home", null),
    /**
     * 二维码
     */
    DR_OR_CODE("orCode", "userType"),
    /**
     * 认证页面
     */
    DR_AUTH_PAGE("authentication", null),
    /**
     * 个人资料
     */
    DR_DOCTOR_INFO("doctorInfo", null),
    /**
     * 提现记录
     */
    DR_BALANCE_LIST("withdrawalRecord", null),
    /**
     * 客服电话
     */
    DR_TELL("tell", "phone"),
    /**
     * 提现详情
     */
    DR_BALANCE_DETAIL("withdrawalDetai", "balanceId"),
    /**
     * 账户动态
     */
    DR_DYNAMIC("information", null),
    /**
     * 我的药房
     */
    DR_MY_DRUG("myDrug", null),
    /**
     * 咨询详情
     */
    DR_CHATDETAIL("chatDetail", "sessionId"),
    /**
     * 我的积分页
     */
    DR_MY_POINT_PAGE("jifenMyPageControl", null),
    /**
     * 积分管理
     */
    DR_POINT_LIST("jifenManage", null),
    /**
     * 积分详情
     */
    DR_POINT_DETAIL("jifenDetail", "pointHistoryId"),
    /**
     * 用药记录
     */
    DR_RECOM_LIST("drugNot", null),
    /**
     * 积分历史
     */
    DR_POINT_HISTORY_LIST("jifenHistory", null),
    /**
     * 手机联系人
     */
    DR_INVITE("invite", null),
    /**
     * 升级提示
     */
    DR_UPDATE_NOTICE("updateAppVersion", null),
    /**
     * 视频列表
     */
    DR_VIDEO_ORDER_LIST("reservationList", null),
    /**
     * 安装电子签名：<code>DR_GDCA_SIGN</code>
     */
    DR_GDCA_SIGN("GDCAsign", null),
    /**
     * 安装电子签名
     */
    DR_CA_SIGN("CAsign", null),
    /**
     * 个人中心：<code>DR_CENTER</code>
     */
    DR_CENTER("doctorMine", null),
    /**
     * 用药详情
     */
    DR_RECOM_DETAIL("recomDetail", "recommendId"),

    /**
     * 患者填写的病历详情
     */
    IM_PATIENTS_MEDICAL_RECORD_DETAIL("medicalRecordDetail", null),

    /**
     * 患者填写的病情描述
     */
    IM_PATIENTS_DISEASE_RECORD_DETAIL("medicalDiseaseDetail", null),

    /**
     * 提醒患者填写病历消息
     */
    IM_FILL_MEDICAL_RECORD_REMIND("remindPtFillMedicalRecord", null),

    /**
     * 复诊提醒-to医生
     */
    REFERRAL_REMIND_TO_DOCTOR("referralRemindToDoctor", "patientId"),
    /**
     * 上传检查报告发送通知
     */
    IM_EXAMINE_REPORT_NOTICE("uploadExamineReportNotice", null),

    /**
     * 病例详情
     */
    DR_CASE_DETAIL("caseDetail", "caseId"),
    /**
     * 病例收集邀请
     */
    DR_CASE_COLLECT_INVITE("caseCollectInvite", "recomId"),
    /**
     * 医生新复诊提醒
     */
    DR_RETURN_VISIT("returnVisit", "count"),

    /**
     * 医生会话评价
     */
    DR_CONSULT_COMMENT_NOTICE("consultCommentNotice", "evaluate_page"),

    /**
     * （医生端1.1优化）
     * 医生端视频申请待接诊页
     */
    DR_CONSULT_VIDEO_LIST("consultVideo", null),

    /**
     * （医生端1.1优化）
     * 医生端复诊开方待处理页
     */
    DR_INQUIRE_MEDICAL("subsequentVisit", null),

    /**
     * （医生端1.1优化）
     * 医生端失效处方列表页
     */
    DR_INVALID_RECOM("invalidRecomList", null),

    /**
     * （医生端1.1优化）
     * 诊费设置页面
     */
    DR_FEES_CONFIG("feesConfig", null),

    /**
     * 随访详情页面
     */
    DR_FOLLOW_UP_NOTICE("followUpNotice", "followUpNotice"),

    /**
     * 随访表单详情页面
     */
    DR_FOLLOW_UP_FORM_NOTICE("followUpForm", "followUpId"),

    // =========================经纪人APP协议==========================//

    /**
     * 经纪人修改通知
     */
    AG_AGENT_UPDATE_NOTICE("agentUpdate", "agentId"),

    // =========================药师APP协议==========================//
    /**
     * 药师端首页
     */
    PH_HOME("home", null),

    // =========================患者APP协议==========================//

    /**
     * 内部web页
     */
    PT_WEB("web", "linkurl"),
    /**
     * 外部web页
     */
    PT_SAFARI("safari", "linkurl"),
    /**
     * 咨询详情
     */
    PT_CHATDETAIL("chatDetail", "sessionId"),
    /**
     * 电话
     */
    PT_TELL("tell", "naiteruiDoctorInfo"),
    /**
     * 首页
     */
    PT_HOME("home", null),
    /**
     * 商品订单列表
     */
    PT_GOODS_ORDER_LIST("productOrderList", null),
    /**
     * 视频订单列表
     */
    PT_VIDEO_ORDER_LIST("appointmentOrderList", null),
    /**
     * 商品订单详情
     */
    PT_GOODS_ORDER_DETAIL("productOrderDetail", null),
    /**
     * 视频订单详情
     */
    PT_VIDEO_ORDER_DETAIL("appointmentOrderDetail", "orderSn"),
    /**
     * 优惠券
     */
    PT_COUPON("coupon", null),
    /**
     * 我的消息
     */
    PT_MYMESSAGE("myMessage", null),

    DR_MEDICTION_REMIND("medicationRemind", "medicationRemindId"),

    /**
     * 线上诊室CMS发送病情 医生点击跳转协议
     */
    CONSULTROOM_MEDICAL_RECORD_DETAIL("consultRoomMedicalRecordDetail", null),

    /**
     * 提醒医生更新病历
     */
    IM_UPDATE_MEDICAL_RECORD_REMIND_TO_DOCTOR("remindDrFillMedicalRecord", null);


    // =========================经纪人APP协议==========================//

    /**
     * 事件：<code>K</code>
     */
    private String k;
    /**
     * 事件参数：<code>V</code>
     */
    @JsonInclude(Include.NON_NULL)
    private String v;

    /**
     * 构造函数
     * @param k
     * @param v
     */
    AppJumpProtocol(String k, String v) {
        this.k = k;
        this.v = v;
    }

    public String parse(String... params) {
        Map<String, String> result = new TreeMap<>();
        if (null != v) {
            result.put("K", k);
            if (null != params && params.length > 0) {
                result.put("V", params[0]);
            }
        } else {
            result.put("K", k);
        }
        return JsonMapper.toJson(result);
    }

    public String parse(String params, Object others) {
        Map<String, Object> result = new TreeMap<>();
        if (null != v) {
            result.put("K", k);
            if (null != params && !"".equals(params)) {
                result.put("V", params);
            }
        } else {
            result.put("K", k);
        }
        result.put("other", others);
        return JsonMapper.toJson(result);
    }

    /**
     * @return String 取得域 k 的方法。
     */
    public String getK() {
        return k;
    }

    /**
     * @return String 取得域 v 的方法。
     */
    public String getV() {
        return v;
    }

}
